#include <stdio.h>
#define max 50
int number = 0; 
int p[max];

void trys(int col,int ma,bool s[],bool l[], bool r[])
{ 
	if(col == ma)  
	{
		number++;
		printf("\n方案%d：",number);
		for(int k =1; k<ma; k++)
		   printf("%d ",p[k]);
		printf("\n"); 
		return ;
	}
	
	for(int row=1;row<ma; row++)
	{
		if(s[row] && l[col+row] && r[col - row +ma]) 
		{
			p[col] = row;
			s[row] = false;
			l[col+row] = false;
			r[col- row+ma] =false;
			
			trys(col+1,ma,s,l,r);
			
			
			s[row] = true;
			l[col+row] = true;
			r[col- row+ma] =true;	
		}
	}
}
 
int main()
{
	int num;
    printf("输入皇后的个数： ");
	scanf("%d", &num); 
	
	int ma = num+1;
	bool s[ma];
	bool l[2*ma-1];
	bool r[2*ma-1];
	
	for(int i =0; i<ma; i++)
	{
		s[i] =true;
	}
	
	for(int i =0; i<2*ma-1; i++)
	{ 
	    l[i]= true;
	    r[i] = true;
	}
	
	trys(1,ma,s,l,r);
	return 0;
}
